home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2006 May / PCWMAY06.iso / Software / Trial / ConceptDraw NetDiagrammer / data1.cab / Samples__Basic / Solutions / OrgChart / loadTXTFunctions.cdb < prev    next >
Text File  |  2006-02-08  |  7KB  |  161 lines

  1. '╨ñ╤â╨╜╨║╤å╨╕╤Å BuildOrgTreeFromTXT ╨╖╨░╤ç╨╕╤é╤ï╨▓╨░╨╡╤é ╨┤╨░╨╜╨╜╤ï╨╡ ╨╛ ╤ü╤é╤Ç╤â╨║╤é╤â╤Ç╨╡ ╨╛╤Ç╨│╨░╨╜╨╕╨╖╨░╤å╨╕╨╕ ╨╕╨╖ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨╣ ╨▒╨░╨╖╤ï ╨┤╨░╨╜╨╜╤ï╤à
  2. '╨╕ ╨╖╨░╨┐╨╛╨╗╨╜╤Å╨╡╤é ╨╝╨░╤ü╤ü╨╕╨▓╤ï, ╨▓ ╨║╨╛╤é╨╛╤Ç╤ï╤à ╤à╤Ç╨░╨╜╤Å╤é╤ü╤Å ╨┤╨░╨╜╨╜╤ï╨╡ ╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨╡ ╨╕ ╨╡╨│╨╛ ╨┐╨╛╨╗╨╛╨╢╨╡╨╜╨╕╨╕ ╨▓ ╤ü╤é╤Ç╤â╨║╤é╤â╤Ç╨╡. 
  3. Function BuildOrgTreeFromTXT(ByRef strTextFileName As String) As Boolean
  4. On Error GoTo ErrHandle
  5.  
  6. Dim intFileNumber As Integer        '╨ÿ╨┤╨╡╨╜╤é╨╕╤ä╨╕╨║╨░╤é╨╛╤Ç ╨╛╨▒╤Ç╨░╨▒╨░╤é╤ï╨▓╨░╨╡╨╝╨╛╨│╨╛ XML-╤ä╨░╨╣╨╗╨░
  7. Dim strPersonData As String        '╨í╤é╤Ç╨╛╨║╨░, ╤ü╨╛╨┤╨╡╤Ç╨╢╨░╤ë╨░╤Å ╨╛╨┤╨╜╤â ╤ü╤é╤Ç╨╛╨║╤â ╨╕╨╖ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨│╨╛ ╤ä╨░╨╣╨╗╨░. ╨ó╨╛ ╨╢╨╡, ╤ç╤é╨╛ ╨╛╨┤╨╜╨░ ╨╖╨░╨┐╨╕╤ü╤î ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨╣ ╨▒╨░╨╖╤ï ╨┤╨░╨╜╨╜╤ï╤à ╤ü ╨┤╨░╨╜╨╜╤ï╨╝╨╕ ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  8. Dim intFieldsCounter As Integer    '╨¥╨╛╨╝╨╡╤Ç ╨╛╨▒╤Ç╨░╨▒╨░╤é╤ï╨▓╨░╤Ä╤ë╨╡╨│╨╛╤ü╤Å ╨┐╨╛╨╗╤Å ╨╖╨░╨┐╨╕╤ü╨╕
  9. Dim intSeparatorPos As Integer    '╨ƒ╨╛╨╖╨╕╤å╨╕╤Å ╤Ç╨░╨╖╨┤╨╡╨╗╨╕╤é╨╡╨╗╤Å ╨┐╨╛╨╗╨╡╨╣ ╨▒╨░╨╖╤ï ╨┤╨░╨╜╨╜╤ï╤à
  10. Dim strFiels As String            '╨í╨╛╨┤╨╡╤Ç╨╢╨╕╨╝╨╛╨╡ ╨╛╨┤╨╜╨╛╨│╨╛ ╨┐╨╛╨╗╤Å ╨╖╨░╨┐╨╕╤ü╨╕ ╨▒╨░╨╖╤ï
  11. Dim fNoError As Boolean            '╨ñ╨╗╨░╨│, ╨┐╨╛╨║╨░╨╖╤ï╨▓╨░╤Ä╤ë╨╕╨╣, ╤ç╤é╨╛ ╨┐╤Ç╨╕ ╨╛╨▒╤Ç╨░╨▒╨╛╤é╨║╨╡ ╨┤╨░╨╜╨╜╤ï╤à ╤ä╨░╨╣╨╗╨░ ╨╜╨╡╤é ╨╛╤ê╨╕╨▒╨╛╨║
  12. Dim strCharSeparator As String    '╨á╨░╨╖╨┤╨╡╨╗╨╕╤é╨╡╨╗╤î ╨┐╨╛╨╗╨╡╨╣ ╨▒╨░╨╖╤ï ╨┤╨░╨╜╨╜╤ï╤à
  13. Dim fWasFoundChiefID As Boolean    '╨ñ╨╗╨░╨│, ╨┐╨╛╨║╨░╨╖╤ï╨▓╨░╤Ä╤ë╨╕╨╣, ╤ç╤é╨╛ ╨▓ ╨╖╨░╨┐╨╕╤ü╨╕ ╨┐╤Ç╨╕╤ü╤â╤é╤ü╤é╨▓╤â╨╡╤é ID ╤Ç╤â╨║╨╛╨▓╨╛╨┤╨╕╤é╨╡╨╗╤Å ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  14. Dim fWasFoundID As Boolean        '╨ñ╨╗╨░╨│, ╨┐╨╛╨║╨░╨╖╤ï╨▓╨░╤Ä╤ë╨╕╨╣, ╤ç╤é╨╛ ╨▓ ╨╖╨░╨┐╨╕╤ü╨╕ ╨┐╤Ç╨╕╤ü╤â╤é╤ü╤é╨▓╤â╨╡╤é ID ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  15.  
  16. Dim i As Integer
  17. Dim j As Integer
  18.  
  19. strCharSeparator = constrCharSeparator
  20.  
  21. fNoError = True
  22.  
  23. '╨₧╤é╨║╤Ç╤ï╤é╨╕╨╡ ╤é╨╡╨║╤ü╤é╨╛╨▓╨╛╨│╨╛ ╤ä╨░╨╣╨╗╨░ ╨┤╨╗╤Å ╤ç╤é╨╡╨╜╨╕╤Å ╨┤╨░╨╜╨╜╤ï╤à
  24. intFileNumber = FreeFile()
  25. Open strTextFileName For Input As #intFileNumber
  26. i=-1
  27. '╨ƒ╨╡╤Ç╨▓╨╛╨╡ ╤ç╤é╨╡╨╜╨╕╨╡ ╤ä╨░╨╣╨╗╨░. ╨₧╨┐╤Ç╨╡╨┤╨╡╨╗╨╡╨╜╨╕╨╡ ╨║╨╛╨╗╨╕╤ç╨╡╤ü╤é╨▓╨░ ╨╜╨╡╨┐╤â╤ü╤é╤ï╤à ╤ü╤é╤Ç╨╛╨║ ╨▓ ╤ä╨░╨╣╨╗╨╡.
  28. '╨Ü╨░╨╢╨┤╨░╤Å ╨╜╨╡╨┐╤â╤ü╤é╨░╤Å ╤ü╤é╤Ç╨╛╨║╨░ ╤ü╤ç╨╕╤é╨░╨╡╤é╤ü╤Å ╨╖╨░╨┐╨╕╤ü╤î╤Ä ╤ü ╨┤╨░╨╜╨╜╤ï╨╝╨╕ ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░.
  29. Do While Not EOF(intFileNumber)
  30.     Line Input #intFileNumber, strPersonData 
  31.     If Trim$(strPersonData)<>"" Then
  32.         i=i+1
  33.     End If
  34. Loop
  35. iUBound = i + 1
  36. '╨ò╤ü╨╗╨╕ ╨▓ ╨▒╨░╨╖╨╡ ╨╜╨╡╤é ╨╜╨╕ ╨╛╨┤╨╜╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░, ╨▓╤ï╨┤╨░╤é╤î ╤ü╨╛╨╛╨▒╤ë╨╡╨╜╨╕╨╡ ╨╛╨▒ ╨╛╤ê╨╕╨▒╨║╨╡.
  37. If iUBound = 0 Then
  38.     MsgBox("V baze dannih o sotrudnikah ne najdeno ni odnoj zapisi.")
  39.     BuildOrgTreeFromTXT = False
  40.     Exit Function
  41. End If
  42.  
  43. '╨₧╨┐╤Ç╨╡╨┤╨╡╨╗╨╡╨╜╨╕╨╡ ╤Ç╨░╨╖╨╝╨╡╤Ç╨╜╨╛╤ü╤é╨╕ ╨╝╨░╤ü╤ü╨╕╨▓╨╛╨▓ ╨▓ ╤ü╨╛╨╛╤é╨▓╨╡╤é╤ü╤é╨▓╨╕╨╕ ╤ü ╨║╨╛╨╗╨╕╤ç╨╡╤ü╤é╨▓╨╛╨╝ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨╛╨▓ ╨▓ ╨▒╨░╨╖╨╡ ╨┤╨░╨╜╨╜╤ï╤à.
  44. ReDim asID(iUBound) As String
  45. ReDim asChiefID(iUBound) As String
  46. ReDim asName(iUBound) As String
  47. ReDim asPost(iUBound) As String
  48. ReDim asEMail(iUBound) As String
  49. ReDim aiLevel(iUBound) As Integer
  50. ReDim adBranchWidth(iUBound) As Double
  51. ReDim adBranchHeight(iUBound) As Double
  52. ReDim abNewPage(iUBound) As Boolean
  53. ReDim asSubordCount(iUBound) As Integer
  54. ReDim asSubordinates(iUBound,iUBound) As Integer
  55. '╨ÿ╨╜╨╕╤å╨╕╨░╨╗╨╕╨╖╨░╤å╨╕╤Å ╨┤╨░╨╜╨╜╤ï╤à ╨┤╨╗╤Å ╤â╤ü╨╗╨╛╨▓╨╜╨╛╨│╨╛ ╨╜╤â╨╗╨╡╨▓╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░.
  56. strOrgName = ""
  57. asID(0)=""
  58. asChiefID(0)=""
  59. asName(0)=""
  60. asPost(0)=""
  61. asEMail(0)=""
  62. aiLevel(0)=0
  63. adBranchWidth(0)=0
  64. adBranchHeight(0)=0
  65. abNewPage(0)=False
  66. asSubordCount(0)=0
  67.  
  68. '╨ó╨╡╨┐╨╡╤Ç╤î ╨┐╤Ç╨╛╤ü╨╝╨░╤é╤Ç╨╕╨▓╨░╨╡╨╝ ╤ä╨░╨╣╨╗ ╨┐╨╛╨▓╤é╨╛╤Ç╨╜╨╛ ╤ü ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡╨╝ ╨┐╨╛╨┤╨│╨╛╤é╨╛╨▓╨╗╨╡╨╜╨╜╤ï╤à ╨┤╨╗╤Å ╤Ç╨░╨▒╨╛╤é╤ï ╨╝╨░╤ü╤ü╨╕╨▓╨╛╨▓.
  69. Seek #intFileNumber, 1    
  70. i=0
  71. '╨ƒ╨╛╨║╨░ ╨╜╨╡ ╨┤╨╛╤ü╤é╨╕╨│╨╜╤â╤é ╨║╨╛╨╜╨╡╤å ╤ä╨░╨╣╨╗╨░ ╨╕ ╨╜╨╡ ╨┐╤Ç╨╛╨╕╨╖╨╛╤ê╨╗╨░ ╨╛╤ê╨╕╨▒╨║╨░, ╨┐╨╛╤ü╤é╤Ç╨╛╤ç╨╜╨╛ ╨╖╨░╤ç╨╕╤é╤ï╨▓╨░╨╡╨╝ ╨┐╨╛ ╨╛╨┤╨╜╨╛╨╣ ╨╖╨░╨┐╨╕╤ü╨╕ ╤ü ╨┤╨░╨╜╨╜╤ï╨╝╨╕ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░
  72. Do While (Not EOF(intFileNumber)) And fNoError
  73.     Line Input #intFileNumber, strPersonData
  74.     strPersonData = Trim$(strPersonData)
  75.     If strPersonData <> "" Then
  76. '╨ò╤ü╨╗╨╕ ╨╖╨░╤ç╨╕╤é╨░╨╜╤ï ╨┤╨░╨╜╨╜╤ï╨╡ ╨╛ ╨╜╨╛╨▓╨╛╨╝ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨╡, ╨╖╨░╨┐╨╛╨╗╨╜╤Å╨╡╨╝ ╤ì╨╗╨╡╨╝╨╡╨╜╤é╤ï ╨╝╨░╤ü╤ü╨╕╨▓╨╛╨▓ ╤ü ╨╕╨╜╨┤╨╡╨║╤ü╨╛╨╝, ╤ü╨╛╨╛╤é╨▓╨╡╤é╤ü╤é╨▓╤â╤Ä╤ë╨╕╨╝ ╨┤╨░╨╜╨╜╨╛╨╝╤â ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╤â
  77.         i=i+1
  78.         intFieldsCounter = 1
  79.         Do
  80. '╨₧╨▒╤Ç╨░╨▒╨░╤é╤ï╨▓╨░╨╡╨╝ ╨┐╨╛╨╗╤Å ╨╖╨░╨┐╨╕╤ü╨╕ ╨┤╨╛ ╤é╨╡╤à ╨┐╨╛╤Ç, ╨┐╨╛╨║╨░ ╨╜╨╡ ╨┤╨╛╤ü╤é╨╕╨│╨╜╨╡╨╝ ╨║╨╛╨╜╤å╨░ ╤ü╤é╤Ç╨╛╨║╨╕. ╨ö╨░╨╜╨╜╤ï╨╡ ╨╕╨╖ ╨┐╨╛╨╗╨╡╨╣ ╨┐╨╛╨╝╨╡╤ë╨░╨╡╨╝ ╨▓ ╨╝╨░╤ü╤ü╨╕╨▓╤ï.
  81.             intSeparatorPos = InStr(strPersonData, strCharSeparator)
  82.             If intSeparatorPos > 0 Then
  83.             strFiels = Trim(Left(strPersonData, intSeparatorPos - 1))
  84.                 strPersonData = Right(strPersonData, Len(strPersonData) - intSeparatorPos)
  85.             Else
  86.                 strFiels = Trim(strPersonData)
  87.             End If
  88.             Select Case intFieldsCounter
  89.             Case conintIDPos
  90.                 asID(i) = strFiels
  91.             Case conintNamePos
  92.                 asName(i) = strFiels
  93.             Case conintChiefIDPos
  94.                 If asChiefID(i) = "0" Then
  95.                     strFiels = ""
  96.                 End If
  97.                 asChiefID(i) = strFiels
  98.             Case conintPostPos
  99.                 asPost(i) = strFiels
  100.             Case conintEMailPos
  101.                 asEMail(i) = strFiels
  102.             Case Else
  103.             End Select
  104.             intFieldsCounter = intFieldsCounter + 1
  105.         Loop While intSeparatorPos > 0
  106.         '╨ƒ╤Ç╨╛╨▓╨╡╤Ç╨║╨░ ╨▓╨╛╨╖╨╝╨╛╨╢╨╜╤ï╤à ╨╛╤ê╨╕╨▒╨╛╤ç╨╜╤ï╤à ╤ü╨╕╤é╤â╨░╤å╨╕╨╣
  107.         If asID(i) = "" Then
  108.             MsgBox("Pri obrabotke spiska voznikla oshibochka. Identifikatori zapisej ne dolzhni bit' pustimi strokami ili 0. Identifikator zapisi " & asName(i) & " okazalsja raven """ & asID(i) & """.")
  109.             fNoError = False
  110.         ElseIf asID(i) = asChiefID(i) Then
  111.             MsgBox("Pri obrabotke spiska voznikla oshibochka. Identifikator rukovoditelja sotrudnika " & asName(i) & " okazalsja raven identifikatoru samogo sotrudnika.")
  112.             fNoError = False
  113.         Else
  114.             j=1
  115.             fWasFoundID = False
  116.             Do While (Not fWasFoundID) And j<i
  117.                 If asID(i) = asID(j) Then
  118.                     fWasFoundID = True
  119.                     MsgBox("Pri obrabotke spiska voznikla oshibochka. Identifikator sotrudnika " & asName(i) & " okazalsja raven identifikatoru sotrudnika " & asName(j) & ".")
  120.                     fNoError = False
  121.                 End If
  122.                 j=j+1
  123.             Loop     
  124.         End If
  125.     End If
  126. Loop
  127.  
  128. Close #intFileNumber
  129.  
  130. '╨ò╤ü╨╗╨╕ ╨┐╤Ç╨╕ ╨╖╨░╤ç╨╕╤é╨║╨╡ ╨┤╨░╨╜╨╜╤ï╤à ╨╜╨╡ ╨┐╤Ç╨╛╨╕╨╖╨╛╤ê╨╗╨╛ ╨╛╤ê╨╕╨▒╨╛╨║,...
  131. If fNoError Then
  132.     '...╤é╨╛ ╨┤╨╗╤Å ╨║╨░╨╢╨┤╨╛╨│╨╛ ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░...
  133.     For i=1 To iUBound
  134.         j=0
  135.         fWasFoundChiefID = False
  136.         '...╨┐╤Ç╨╛╤ü╨╝╨░╤é╤Ç╨╕╨▓╨░╨╡╨╝ ╤ü╨┐╨╕╤ü╨╛╨║ ╨╡╨│╨╛ ╨║╨╛╨╗╨╡╨│.
  137.         Do While (Not fWasFoundChiefID) And j<=iUBound 
  138.             '╨ò╤ü╨╗╨╕ ID ╨║╨╛╨╗╨╗╨╡╨│╨╕ ╤ü╨╛╨▓╨┐╨░╨┤╨░╨╡╤é ╤ü ID ╤Ç╤â╨║╨╛╨▓╨╛╨┤╨╕╤é╨╡╨╗╤Å ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░,...
  139.             If asChiefID(i) = asID(j) Then
  140.                 fWasFoundChiefID = True
  141.                 '...╤é╨╛ ╨║ ╤ü╨┐╨╕╤ü╨║╤â ╨┐╨╛╨┤╤ç╨╕╨╜╨╡╨╜╨╜╤ï╤à ╨║╨╛╨╗╨╗╨╡╨│╨╕ ╨┤╨╛╨▒╨░╨▓╨╗╤Å╨╡╤é╤ü╤Å ╨╕╨╜╨┤╨╡╨║╤ü ╤ü╨╛╤é╤Ç╤â╨┤╨╜╨╕╨║╨░.
  142.                 asSubordinates(j,asSubordCount(j))=i
  143.                 asSubordCount(j)=asSubordCount(j)+1
  144.             End If
  145.             j=j+1
  146.         Loop     
  147.     Next
  148.     BuildOrgTreeFromTXT = True
  149. Else
  150.     BuildOrgTreeFromTXT = False
  151. End If
  152.  
  153. Exit Function
  154.  
  155. ErrHandle:
  156.     MsgBox ("In performing the macros, an error has occured.", cdbExclamation)
  157.     BuildOrgTreeFromTXT = False
  158.     Exit Function
  159. End Function
  160.  
  161.